import java.util.*;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec 中等
 * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 * 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
 * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
 * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
 * @since 2023-09-06 12:44
 */
public class _049字母异位词分组 {
    public static void main(String[] args) {
        String[] strs = {
                "eat", "tea", "tan", "ate", "nat", "bat"
        };
        List<List<String>> res = new _049字母异位词分组().groupAnagrams(strs);
        System.out.println(res);
    }
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        for(String s : strs){
            char[] array = s.toCharArray();
            Arrays.sort(array);
            String key = new String(array);
            if(!map.containsKey(key)){
                map.put(key, new ArrayList<>());
            }
            map.get(key).add(s);
        }
        return new ArrayList<>(map.values());
    }
}
